struct Solution {}

fn main() {}

impl Solution {
    pub fn merge(nums1: &mut Vec<i32>, m: i32, nums2: &mut Vec<i32>, n: i32) {
        let mut nums1_start = nums1.len() - nums2.len() - 1;
        let mut nums2_start = nums2.len() - 1;
        let mut place_idx = nums1.len() - 1;

        loop {
            // usize类型，0再减1会变成正数最大值
            if nums2_start >= n as usize && nums1_start >= m as usize {
                break;
            }

            if nums2_start >= n as usize {
                nums1[place_idx] = nums1[nums1_start];
                nums1_start -= 1;
                place_idx -= 1;
                continue;
            }

            if nums1_start >= m as usize {
                nums1[place_idx] = nums2[nums2_start];
                nums2_start -= 1;
                place_idx -= 1;
                continue;
            }

            if nums1[nums1_start] > nums2[nums2_start] {
                nums1[place_idx] = nums1[nums1_start];
                nums1_start -= 1;
            } else {
                nums1[place_idx] = nums2[nums2_start];
                nums2_start -= 1;
            }
            place_idx -= 1;
        }
    }
}